package com.tzh.utils;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import org.springframework.util.StringUtils;

import java.lang.reflect.Method;

public class DtoUtils {

    public static <T> void queryDto2Examle(T query, Object example) {
        String jsonStr = JSON.toJSONString(query);
        JSONObject json = JSONObject.parseObject(jsonStr);
        json.keySet().stream().forEach(key -> {
            if (!key.contains("qy") && !key.equals("pageNum") && !key.equals("pageSize") && !key.equals("orderMethod") && !key.equals("orderType") && !key.toUpperCase().contains("search".toUpperCase())) {
                Method[] mlist = example.getClass().getMethods();
                String value = json.getString(key);
                for (Method m : mlist) {
                    Class<?>[] clses = m.getParameterTypes();
                    if (clses.length > 0) {
                        Class<?> cls = clses[0];
                        if (m.getName().toUpperCase().endsWith(("and" + key + "EqualTo").toUpperCase())) {
                            if (!StringUtils.isEmpty(value)) {
                                try {
                                    excuteMethod(m, example, cls, value);
                                } catch (Exception e) {
                                    e.printStackTrace();
                                }
                            }

                        }
                    }
                }
            }
        });
    }


    public static <T> void delDto2Examle(T query, Object example) {
        String jsonStr = JSON.toJSONString(query);
        JSONObject json = JSONObject.parseObject(jsonStr);
        json.keySet().stream().forEach(key -> {
            Method[] mlist = example.getClass().getMethods();
            String value = json.getString(key);
            for (Method m : mlist) {
                Class<?>[] clses = m.getParameterTypes();
                if (clses.length > 0) {
                    Class<?> cls = clses[0];
                    if (m.getName().toUpperCase().endsWith(("and" + key + "EqualTo").toUpperCase())) {
                        if (!StringUtils.isEmpty(value)) {
                            try {
                                excuteMethod(m, example, cls, value);
                            } catch (Exception e) {
                                e.printStackTrace();
                            }
                        }

                    }
                }
            }
        });
    }

    private static void excuteMethod(Method method, Object obj, Class<?> cls, String value) throws Exception {
//		if(cls.toString().equals("class java.lang.String"))
//		{
//			method.invoke(obj, value);
//		}
//		else if(cls.toString().equals("class java.util.Date"))
//		{
//			method.invoke(obj, DateUtils.parseDatetime(value));
//		}
//		else if(cls.toString().equals("class java.lang.Boolean"))
//		{
//			Boolean boolname=Boolean.parseBoolean(value);
//			method.invoke(obj, boolname);
//		}
//		else if(cls.toString().equals("class java.lang.Integer"))
//		{
//			method.invoke(obj,new Integer( value));
//		}
//
//		else if(cls.toString().equals("class java.lang.Long"))
//		{
//			method.invoke(obj,new Long( value));
//		}
    }


}
